import { defineConfig } from "vitepress";

// https://vitepress.dev/reference/site-config
/**
 * 在最外层可使用await， 最后导出设置即可
 * 1.export default {base: '', ....}
 * 2.export default defaultConfig({base: '', ....})
 * 3.export default async function() { return defineConfig({....})}
 * ~ 默认主题使用defineConfig可提供智能提示
 * ~ 自定义主题使用defineConfigWithTheme<ThemeConfig> ThemeConfig为自定义主题的类型
 */
export default defineConfig({
  // 应用级配置
  // 站点元数据： base title titleTemplate lang description head
  base: "/flow-toy-ui/",
  // 1.站点标题html-head-title（index.md）
  // 2.使用默认主题时无siteTile且siteTitle不为FALSE时导航栏的title
  // 3.若单个页面未设置titleTemplate，其html-head-title为： 第一个h1内容 | title
  title: "Flow-Toy-UI",
  // 自定义所有页面（含index.md）的title后缀或整个title 默认index无后缀
  // 1.'Suffix' 修改后缀为Suffix
  // 2.'xxx :title xxx' 完全自定义title :title为页面第一个h1后的文字,在index
  // 3.false 不添加后缀
  // titleTemplate: "Flow-UI | :title",
  lang: "en-US", // html的lang
  description: "模仿Element Plus的Vue3组件库", // html -head - meta - description
  // 向HTML的head中添加
  head: [
    [
      "link",
      {
        rel: "icon",
        href: "/flow-toy-ui/logo.png", // 源文件目录同级的public下 有base的需要前缀拼base
      },
    ],
  ],
  // 路由：cleanUrls rewrites
  cleanUrls: true, // 设置为 true 时，VitePress 将从 URL 中删除 .html 后缀 需要服务器支持/foo访问/foo.html
  // 路由重写
  // 'packages/pkg-b/src/pkg-b-docs.md': 'pkg-b/index.md'
  // 动态重写 'packages/:pkg/src/(.*)': ':pkg/index.md'
  // 链接要相对重写后的路由
  rewrites: {
    "md/:pkg/:path": ":pkg/:path",
    // "md/:pkg/index.md": ":pkg", // index默认会转为/访问, 也可带index
  },
  // 构建
  srcDir: ".", // 源目录(markdown文件的目录) 相对于项目根目录
  srcExclude: [], // 排除的源文件 https://github.com/mrmlnc/fast-glob#pattern-syntax
  outDir: "./.vitepress/dist", // 构建输出位置 相对于项目根目录
  assetsDir: "assets", // 构建生成的静态资源目录 在outDir内
  cacheDir: "./.vitepress/cache", // 开发服务器缓存目录 相对于项目根目录  会存储预打包的依赖项或 vite 生成的某些缓存文件，使用缓存可以提高性能。如需重新生成缓存文件，你可以使用 --force 命令行选项或手动删除目录
  metaChunk: true, // 将页面元数据提取到单独的 JavaScript 块中，而不是内联在初始 HTML 中。这使每个页面的 HTML 负载更小，并使页面元数据可缓存，从而当站点中有很多页面时可以减少服务器带宽。
  mpa: false, // Multi-Page Application 所有页面不含任何js 即缺少路由 -- 初始访问快，切换要重新加载整个页面，无交互性  可在md/vue中使用<script client>加简单的js,适合交互少
  // 忽略死链
  // boolean：是否忽略 有死链不影响构建
  // localhostLinks: 出现死链构建失败 但不检查localhost链接
  // (string | RegExp | ((link: string) => boolean))[]
  ignoreDeadLinks: false,
  markdown: {
    // anchor: {
    //   level: 2,
    // },
  }, // markdown配置
  vue: {
    // @vitejs/plugin-vue 选项
  }, //  已经包含 Vite 的官方 Vue 插件 (@vitejs/plugin-vue)
  vite: {
    // Vite 配置选项
  }, // vite配置
  // 主题色
  // boolean: 是否可切换明暗模式 true时默认主题将由用户的首选配色方案决定。
  // dark：可切换 默认深色
  // force-dark：强制深色 不可切换
  // @vueuse/core useDark -- UseDarkOptions {valueLight: xx, valueDrak: xx, onChanged: (xx) => void}
  appearance: true,
  lastUpdated: true, // 是否使用 Git 获取每个页面的最后更新时间戳。时间戳将包含在每个页面的页面数据中，可通过 useData 访问。默认主题开启可在页面下面显示最后更新时间，通过themeConfig.lastUpdatedText 选项自定义文本。
  // 主题配置 (默认主题 DefaultTheme.config)
  // https://vitepress.dev/reference/default-theme-config
  themeConfig: {
    i18nRouting: false, // 默认将本地语言更改为 zh 会将 URL 从 /foo（或 /en/foo/）更改为 /zh/foo，设为false禁用此行为
    // logo: {
    //   // 显示在导航栏标题前面
    //   light: "logo.png",
    //   dark: "logo.png", // 不用拼base
    //   alt: "",
    // },
    logo: "/logo.png",
    // siteTitle: "hahahha", // string | false  自定义导航栏的title,不用站点title 为FALSE导航栏不展示title(logo中含title时很有用)
    // 上导航栏菜单
    /**
     * interface NavItemChildren {
          text?: string
          items: NavItemWithLink[]
       }
       interface NavItemWithChildren {
        text?: string;
        items: (NavItemWithLink | NavItemChildren) [];
        afterMatch?: string;
       }
     */
    nav: [
      {
        // NavItemWithLink
        text: "指南", // 显示的文本
        link: "/guide/design", // 链接
        activeMatch: "^/guide/", // 高亮匹配规则 必须是正则的字符串 默认只在对应的link时active
        target: "_self", // 默认会根据内外链接自动判断target和rel
        rel: "",
        noIcon: false,
      },
      {
        text: "组件",
        link: "/component/overview",
        activeMatch: "^/component/",
      },
    ],
    // 侧导航栏菜单
    // 最多6级 超过则忽略
    /**
     * interface SideBarItem {
     *  text?: string;
     *  items?: SideBarItem[];
     *  link?: string;
     *  collapsed?: boolean; 未指定，侧边栏不可折叠； true：可折叠且默认折叠 false：可折叠且默认展开
     * }
     * 多侧边栏
     * interface SidebarMulti {
        [path: string]: SidebarItem[]
       }
       export type Sidebar = SidebarItem[] | SidebarMulti  // SidebarItem[]-单侧边栏 SidebarMulti-多侧边栏

       import { useSidebar } from 'vitepress/theme'
     */
    // 多侧边栏
    sidebar: {
      "/guide/": [
        {
          text: "基础",
          items: [
            { text: "设计", link: "/guide/design" },
            { text: "安装", link: "/guide/install" },
            { text: "快速开始", link: "/guide/quickstart" },
          ],
        },
      ],
      "/component/": [
        {
          text: "组件概览",
          link: "/component/overview", // 若link末尾为/, 则显示相应目录的index.md
        },
        {
          text: "基础组件",
          items: [
            { text: "Button 按钮", link: "/component/button" },
            { text: "Icon 图标", link: "/component/icon" },
          ],
          collapsed: false,
        },
      ],
    },
    // 当前页面导航(大纲) boolean | 'left' // left-左侧 true-右边 false-不展示
    aside: false,
    // 大纲 Outline | Outline['level'] | false
    // false时 不显示大纲但aside位置还预留
    outline: {
      label: "页面导航", // 大纲的标题 默认是 ‘On this Page’,
      // 大纲要显示的标题级别 // number | [number, number] | 'deep'
      // number: 只显示该级别的标题
      // [number, number] 第一个数字是最小级别，第二个数字是最大级别
      // deep 等同于 [2, 6]
      level: "deep", // default 2
    },
    // 导航栏中展示带有图标的社交账号
    socialLinks: [
      {
        icon: "github",
        link: "https://github.com/DogMeMe",
        // ariaLabel?: "string", 无障碍
      }, // icon: github\npm... | { svg: string }
    ],
    // 页脚设置 仅当不设置sidebar时才显示
    // message和copyright中都可使用html字符串
    footer: {
      message: "Released under the MIT License.",
      copyright: "Copyright © 2019-present Evan You",
    },
    // 编辑链接 显示链接以在Git管理服务商编辑页面
    // 可在frontmatter中对页面单独禁用
    // editLink: {
    //   pattern: "https://github.com/vuejs/vitepress/edit/main/docs/:path",
    //   text: "编辑",
    // },
    // 自定义上次更新的文本和日期格式。
    // 可在frontmatter中对页面单独禁用
    lastUpdated: {
      text: "Last updated",
      formatOptions: {
        dateStyle: "full",
        timeStyle: "medium",
      },
    },
    // algolia  搜索
    // carbonAds: {code?: string; placement?: string}, // 广告
    // 自定义上/下一页链接上的文字 string | false | {text: '', link: ''} , false时不展示
    /**
     * frontmatter中可对页面单独设置
     * ---
     * prev:
     *  text: '',
     *  link: ''
     * ---
     */
    docFooter: {
      prev: "Previous Page",
      next: "Next Page",
    },
    darkModeSwitchTitle: "Switch to dark theme", // 自定义悬停时显示的深/ 浅色模式开关标题。
    lightModeSwitchTitle: "Switch to light theme", // 自定义悬停时显示的深/ 浅色模式开关标题。
    darkModeSwitchLabel: "Appearance", // 自定义深色模式开关标签 仅移动端
    sidebarMenuLabel: "Menu", // 自定义侧边栏菜单标签 仅移动端
    returnToTopLabel: "Return to top", // 回到顶部标签 仅移动端
    // langMenuLabel: '', // 语言切换按钮的aria-label
    externalLinkIcon: false, // 是否在 markdown 中的外部链接旁显示外部链接图标。
  },
  // 构建钩子
  buildEnd: (siteConfig) => {}, // 在构建 SSG 完成后但在 VitePress CLI 进程退出之前运行
  postRender: (config) => {}, // 在 SSG 渲染完成时调用。它将允许在 SSG 期间处理传递的内容。
  // 在生成每个页面之前转换 head。它将允许添加无法静态添加到 VitePress 配置中的 head entries。只需要返回额外的 entries，它们将自动与现有 entries 合并。
  // 不要改变context
  // 开发期间不会调用 开发时可调用transformPageData
  transformHead: (context) => [],
  // 用于在保存到磁盘之前转换每个页面的内容。
  // 不要改变 context 中的任何东西
  transformHtml: (code, id, context) => {},
  // 用于转换每个页面的 pageData。可以直接改变 pageData 或返回将合并到 PageData 中的更改值。
  // 不要改变 context 中的任何东西
  // 开发时会调用 影响开发服务器性能，可判断生产环境时调用
  transformPageData: (pageData, context) => {},
});
